package com.yms.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yms.mapper.RoleMapper;
import com.yms.mapper.RoleMenuMapper;
import com.yms.pojo.PageResult;
import com.yms.pojo.Result;
import com.yms.pojo.Role;
import com.yms.pojo.RoleMenu;
import com.yms.service.IRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collections;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author ${author}
 * @since 2020-03-20
 */
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
    @Autowired
    private RoleMapper roleMapper;
    @Autowired
    private  RoleMenuMapper roleMenuMapper;
    @Override
    public PageResult<Role> selectByPage(Integer page, Integer rows) {
        Page<Role> rolePage = new Page<>(page, rows);
        Page<Role> selectPage = roleMapper.selectPage(rolePage, null);
        PageResult<Role> result = new PageResult<>();
        result.setRows(selectPage.getRecords());
        result.setTotal(selectPage.getTotal());
        return result;
    }

    @Override
    public Result addRoleAndRoleMenu(Role role, int[] a) {
        int insert = roleMapper.insert(role);
        for (int i=0;i<a.length;i++){
            RoleMenu roleMenu = new RoleMenu();
            roleMenu.setRid(role.getRid());
            roleMenu.setMid(a[0]);
            insert = roleMenuMapper.insert(roleMenu);
        }
        Result result = new Result();
        result.setSuccess(insert>0?true:false);
        result.setMessage(insert>0?"添加角色成功":"添加角色失败");
        return result;
    }

    /**
     *
     * @param role 要更新的角色
     * @param a 是mid,由于在controller层对字符串的mid进行按照逗号分隔，并转化为整型数组
     * @return
     */
    @Override
    public Result flushRoleAndRoleMenu(Role role, int[] a) {
        //先更新角色表
        int i1 = roleMapper.updateById(role);
        //开始更新角色菜单表，由于要更新众多，循环
        for (int i = 0; i < a.length; i++) {
            RoleMenu roleMenu = new RoleMenu();
            roleMenu.setRid(role.getRid());
            roleMenu.setMid(a[i]);
            i1 = roleMenuMapper.update(roleMenu,new QueryWrapper<RoleMenu>().eq("rid",role.getRid()));
        }
        Result result = new Result(i1>0?true:false,i1>0?"修改成功":"修改失败");
        return result;
    }

    /**
     *
     * @param a 指的是传过来的rid，由于可能一次性删除多个，因此是一个数组
     *          删除的时候删除角色表根据主键删除，而删除对应角色菜单表仅仅是根据一个字段删除
     * @return
     */
    @Override
    public Result deleteRole(int[] a) {
        int i1=0;
        //再根据字段rid删除角色菜单表
        for(int i: a){
            //先根据主键rid删除角色表
            i1= roleMapper.deleteById(i);
            i1 = roleMenuMapper.delete(new QueryWrapper<RoleMenu>().eq("rid",i));
        }
        //只需要判断i1是否大于零，即可判断出是否两个表的删除操作成功
        Result result = new Result();
        result.setSuccess(i1>0?true:false);
        result.setMessage(i1>0?"删除成功":"删除失败");
        return null;
    }
}
